<?php

class loja_carrinhoModel extends Model{
    private   $cookie = 'carrinho';
    protected $tabela = "loja_carrinho";
    protected $pkey   = array("cod_usuario", "cod_produto");
    protected $dados = array(
        
        'cod_usuario' => array(
            'name'    => "Usuário",
            'pkey'    => true,
            'type'    => 'int',
            'notnull' => true,
            'fkey'    => array(
                'model'         => 'usuario/login', 
                'cardinalidade' => '1n', //nn 1n 11
                'keys'          => array('cod_usuario', 'nome')
            )
         ),
        
        'cod_produto' => array(
            'name'    => "Produto",
            'pkey'    => true,
            'type'    => 'int',
            'notnull' => true,
            'fkey'    => array(
                'model'         => 'loja/produto', 
                'cardinalidade' => '1n', //nn 1n 11
                'keys'          => array('cod_produto', 'pnome')
            )
         ),
        
        'quantidade' => array(
            'name'    => "Quantidade",
            'type'    => 'int',
            'size'    => '11',
            'notnull' => true
         ),
        
        'data' => array(
            'name'    => 'Data de adição',
            'type'    => 'TIMESTAMP',
            'default' => 'CURRENT_TIMESTAMP',
            'notnull' => true
        )
    );
    
    private function getProduto($cod_produto){
        $this->LoadModel("loja/produto", 'prod');
        $item = $this->prod->getItem($cod_produto);
        if(empty ($item)){
            $this->setErrorMessage("Produto não existe");
            return false;
        }
        return $item;
    }
    
    public function inserirProduto($cod_produto){
        
        if(!$item = $this->getProduto($cod_produto)) return false;  
        $value = cookie::getVar($this->cookie);
        if(array_key_exists($cod_produto, $value)) return true;
        
        $item['qtd']         = '1';
        $value[$cod_produto] = $item;
        cookie::setVar($this->cookie, $value);
        return true;
    }
    
    public function apagarProduto($cod_produto){
        if(!$item = $this->getProduto($cod_produto)) return false;   
        $value = cookie::getVar($this->cookie);
        if(array_key_exists($cod_produto, $value)){
            unset ($value[$cod_produto]);
        }
        cookie::setVar($this->cookie, $value);
        return true;
    }
    
    public function modificarQuantidade($cod_produto, $qtd){
        if($qtd <= 0) { return $this->apagarProduto ($cod_produto);}
        if(!$item = $this->getProduto($cod_produto)) { return false;}
        $estoque = $item['estoque'];
        if($qtd > $estoque){
            $msg = "";
            $s = ($estoque > 1)? "s": "";
            switch ($item['fimestoque']){
                case 0:
                    break;
                case 1:
                    $msg = "Produto disponível apenas em pré-venda a partir de $estoque unidade$s";
                    break;
                case 2:
                case 3:
                    $this->invalid = $estoque;
                    $msg = "Este produto está indisponível a partir de $estoque unidade$s";
                    break;
            }
            if($msg != ""){
                $this->setErrorMessage($msg);
                return false;
            }
        }
          
        $value = cookie::getVar($this->cookie);
        if(!array_key_exists($cod_produto, $value)) $this->inserirProduto($cod_produto);
        $item['qtd']         = $qtd;
        $value[$cod_produto] = $item;
        cookie::setVar($this->cookie, $value);
        return true;
    }
    
    public function getSubtotal($cod_produto){      
        $value = cookie::getVar($this->cookie);
        $total = 0;
        if(array_key_exists($cod_produto, $value)) $total = $value[$cod_produto]['preco'] * $value[$cod_produto]['qtd'];
        return $total;
    }
    
    public function getMaxValidEstoque(){
        if(isset($this->invalid))
            return $this->invalid;
    }
    
    public function getCodProdutos(){
        $itens = $this->getCarrinho();
        if(empty ($itens)) return array();
        return array_keys($itens);
    }
    
    public function getCarrinho(){
        return (cookie::getVar($this->cookie));
    }
    
    public function getTotal(){      
        $value = cookie::getVar($this->cookie);
        $total = 0;
        if(is_array($value)){
            foreach($value as $v){
                $total += $v['preco'] * $v['qtd'];
            }
        }
        return $total;
    }
    
    public function getNumItens(){    
        $value = cookie::getVar($this->cookie);
        if(!is_array($value)) return 0;
        return count($value);
    }
    
    public function finalizar(){
        cookie::destroy($this->cookie);
    }
}

?>
